﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace Sped.Sped
{
    /// <summary>
    /// REGISTRO A120: INFORMAÇÃO COMPLEMENTAR - OPERAÇÕES DE IMPORTAÇÃO
    /// </summary>
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ProgId("SpedPisCofins.RegA120")]
    [ComVisible(true)]
    public class RegA120 : IBloco
    {
        /// <summary>
        /// Valor total do serviço, prestado por pessoa física ou jurídica
        /// domiciliada no exterior.
        /// </summary>
        public double VL_TOT_SERV { get; set; }
        /// <summary>
        /// Valor da base de cálculo da Operação – PIS/PASEP – Importação
        /// </summary>
        public double VL_BC_PIS { get; set; }
        /// <summary>
        /// Valor pago/recolhido de PIS/PASEP – Importação
        /// </summary>
        public double VL_PIS_IMP { get; set; }
        /// <summary>
        /// Data de pagamento do PIS/PASEP – Importação
        /// </summary>
        public DateTime DT_PAG_PIS { get; set; }
        /// <summary>
        /// Valor da base de cálculo da Operação – COFINS – Importação
        /// </summary>
        public double VL_BC_COFINS { get; set; }
        /// <summary>
        /// Valor pago/recolhido de COFINS – Importação
        /// </summary>
        public double VL_COFINS_IMP { get; set; }
        /// <summary>
        /// Data de pagamento do COFINS – Importação
        /// </summary>
        public DateTime DT_PAG_COFINS { get; set; }
        /// <summary>
        /// Local da execução do serviço:
        ///     0 – Executado no País;
        ///     1 – Executado no Exterior, cujo resultado se verifique no País.
        /// </summary>
        public string LOC_EXE_SERV { get; set; }

        public override bool ValidaRegistro(ref string Erro)
        {
            var ValidacaoOK = true;
            Erro = "";
            
            if (string.IsNullOrEmpty(this.LOC_EXE_SERV))
                this.LOC_EXE_SERV = string.Empty;

            if (!this.LOC_EXE_SERV.StringIN("0-1"))
            {
                Erro += "\r\n* Registro 0600 - Nome do centro de custos não informado.";
                ValidacaoOK = false;
            }

            return ValidacaoOK;
        }

        public override string Layout()
        {
            var Linha = string.Empty;

            Linha += "A120" + this.Delimitador;
            Linha += this.VL_TOT_SERV.FormatoValorSped(2) + this.Delimitador;
            Linha += this.VL_BC_PIS.FormatoValorSped(2) + this.Delimitador;
            Linha += this.VL_PIS_IMP.FormatoValorSped(2) + this.Delimitador;
            Linha += this.DT_PAG_PIS.FormatoDataSped() + this.Delimitador;
            Linha += this.VL_BC_COFINS.FormatoValorSped(2) + this.Delimitador;
            Linha += this.VL_COFINS_IMP.FormatoValorSped(2) + this.Delimitador;
            Linha += this.DT_PAG_COFINS.FormatoDataSped() + this.Delimitador;
            Linha += this.LOC_EXE_SERV.Trim() + this.Delimitador;

            return Linha.Trim(); 
        }
    }
}
